/*
  链式调用
    1. then方法必定会返回一个新的Promise
      可以理解为后续处理也是一个任务

    2. 新任务的状态取决与后续处理：
      1. 若没有相关的后续处理，新任务的状态和前任务一致，数据为前任务的数据
      
      2. 若有后续处理但还未执行，新任务挂起

      3. 若后续处理执行了，则根据后续处理的情况确定新任务的状态
        1. 后续处理执行无错，新任务的状态未完成，数据未后续处理的返回值

        2. 后续处理执行有错，新任务状态未失败，数据为异常对象

        3. 后续执行后返回的是一个任务对象，新任务的状态和数据与该任务对象一致
*/

const pro1 = new Promise((resolve, reject) => {
  console.log("学习");

  /* setTimeout(() => {
    resolve(1);
    }, 1000); */
  resolve(1);

  // console.log("中奖5个亿");
  // reject(123);
});

const pro2 = pro1.then(() => {
  // 后续处理，看是否返回任务，如果不返回任务新任务主要看执行是否报错，返回任务对象，pro2状态与任务状态一致
  console.log("考试");
  throw new Error("abc");
});

// pro1（成功）没有后续处理的成功状态，因此pro2状态和pro1状态一致
/* const pro2 = pro1.catch(() => {
  console.log("学习失败，没法考试了");
});
 */
const pro3 = pro2.then(() => {
  console.log("出成绩");
});

setTimeout(() => {
  console.log(pro2);
  console.log(pro3);
});
